package com.party.core.dao.read.order;

import com.party.common.paging.Page;
import com.party.core.dao.read.BaseReadDao;
import com.party.core.model.order.OrderForm;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * 商品订单数据读取 party Created by wei.li on 2016/9/18 0018.
 */
@Repository
public interface OrderFormReadDao extends BaseReadDao<OrderForm> {
	/**
	 * 
	 * @param goodsId
	 * @param memberId
	 * @param isPay
	 * @param status
	 * @return
	 */
	List<OrderForm> getOrderSuccess(@Param(value = "goodsId") String goodsId, @Param(value = "memberId") String memberId,
			@Param(value = "isPay") Boolean isPay, @Param(value = "status") Set<Integer> status);

	List<OrderForm> listPage(@Param(value = "order") OrderForm orderForm, @Param(value = "status") Set<Integer> status, Page page);

	/**
	 * web端
	 * @param orderForm
	 * @param params
	 * @param page
	 * @return
	 */
	List<OrderForm> webListPage(@Param(value = "order") OrderForm orderForm, @Param(value = "params") Map<String, Object> params, Page page);
	
	/**
	 * 获取总金额
	 * @param orderForm
	 * @return
	 */
	Double getTotalPayment(@Param(value = "order") OrderForm orderForm, @Param(value = "params") Map<String, Object> params);

	/**
	 * 分销订单
	 * @param orderForm 订单信息
	 * @param params 查询参数
	 * @param page 分页参数
	 * @return 订单列表
	 */
	List<OrderForm> distributorListPage(@Param(value = "order") OrderForm orderForm, @Param(value = "params") Map<String, Object> params, Page page);

	/**
	 * 统计每天的订单数
	 * @param parameter 统计参数
	 * @return 统计结果
	 */
	List<HashMap<String, Object>> countByDate(@Param(value = "parameter") HashMap<String, Object> parameter);

	/**
	 * 统计所有订单
	 * @param parameter 统计参数
	 * @return 统计结果
	 */
	Integer count(@Param(value = "parameter") HashMap<String, Object> parameter);

	/**
	 * 查询所有有效的统计
	 * @param parameter 统计参数
	 * @return 统计结果
	 */
	Integer allValidCount(@Param(value = "parameter") HashMap<String, Object> parameter);

	/**
	 * 统计合伙人订单
	 *
	 * @param parameter 统计参数
	 * @return 统计结果
	 */
	Integer countByCopartner(@Param(value = "parameter") HashMap<String, Object> parameter);

    OrderForm getOrderByCondition(@Param("order") OrderForm t, @Param("params") Map<String, Object> params);

	/**
	 * 统计订单金额
	 * @param parameter 请求参数
	 * @return 统计金额
	 */
	Double paymentSum(@Param(value = "parameter") HashMap<String, Object> parameter);

	/**
	 * 统计合伙人订单金额
	 * @param parameter 请求参数
	 * @return 统计金额
	 */
	Double paymentSumByCopartner(@Param(value = "parameter") HashMap<String, Object> parameter);

	/**
	 * 统计每天金额
	 * @param parameter 请求参数
	 * @return 统计金额
	 */
	List<HashMap<String, Double>> paymentSumByDate(@Param(value = "parameter") HashMap<String, Object> parameter);

	/**
	 * 统计众筹项目的订单数和累计金额
	 *
	 * @param activityId
	 * @return
	 */
	Map<String, Object> getZcActivityOrder(@Param("activityId") String activityId);

	/**
	 * web端
	 * @param orderForm
	 * @param params
	 * @param page
	 * @return
	 */
	List<OrderForm> newWebListPage(@Param(value = "order") OrderForm orderForm, @Param(value = "params") Map<String, Object> params);

	List<OrderForm> newWebListPageNew(@Param(value = "order") OrderForm orderForm, @Param(value = "params") Map<String, Object> params);

    Integer newWebListCount(@Param(value = "order") OrderForm orderForm, @Param(value = "params") Map<String, Object> params);

	Integer newWebListCountNew(@Param(value = "order") OrderForm orderForm, @Param(value = "params") Map<String, Object> params);


	/**
	 * 已取消的订单
	 *
	 * @return 订单集合
	 */
	List<String> getCanceledList();

	/**
	 * 超过二十四小时的待支付订单
	 *
	 * @return 订单集合
	 */
	List<String> getNotPayList();

	/**
	 * 获取订单数据
	 *
	 * @param eventId 主题编号
	 * @param status
     * @return
	 */
	Double getOrderData(@Param(value = "eventId") String eventId, @Param(value = "status") Integer status,@Param(value = "payType")Integer payType);

/*	*//**
	 * 获取直接付款订单数据
	 *
	 * @param eventId 主题编号
	 * @param status
	 * @return
	 *//*
	Double getDpOrderData(@Param(value = "eventId") String eventId, @Param(value = "status") Integer status);*/

	/**
	 * 统计众筹活动的累计订单数，累计资金数
	 *
	 * @param activityId 活动编号
	 * @return
	 */
	Map<String, Object> statisticZcActivityData(@Param(value = "activityId") String activityId);

	/**
	 * 统计普通活动的累计订单数，累计资金数
	 *
	 * @param activityId 活动编号
	 * @return
	 */
	Map<String,Object> statisticActivityData(@Param(value = "activityId") String activityId);

    Map<String,Object> disCount(@Param(value = "parameter") Map<String, Object> parameter);

	/**
	 * @param type   类型 1：order_form 2:order_form_history
	 * @param offset 页码
	 * @param limit  每页多少
	 * @return java.util.List<java.lang.String>
	 * @Author yifeng
	 * @Description 获取没有附属表的订单
	 * @Date 15:43 2018/12/28
	 **/
	List<String> listPageForSubInfo(@Param(value = "type") Integer type,
									@Param(value = "offset") Integer offset,
									@Param(value = "limit") Integer limit);

	/**
	 * @param type 类型 1：order_form 2:order_form_history
	 * @return java.lang.Integer
	 * @Author yifeng
	 * @Description 获取没有附属表的订单count
	 * @Date 15:44 2018/12/28
	 **/
	Integer countForSubInfo(@Param(value = "type") Integer type);

	List<Map<String,Object>> queryMerchantDatas(@Param(value = "params") Map<String,Object> params);

	/**
	 * @param eventId
	 * @return java.util.List<java.lang.String>
	 * @Author yifeng
	 * @Description 获取主题的商户编号
	 * @Date 16:36 2019/1/19
	 **/
	List<Map<String,Object>> distinctMerchantId(@Param(value = "eventId") String eventId);

	/**
	 * @param txzMerchantId 系统商户编号
	 * @return java.util.List<java.util.Map<java.lang.String,java.lang.Object>>
	 * @Author yifeng
	 * @Description 机构在赛事服务的金额
	 * @Date 18:05 2019/1/24
	 **/
	List<Map<String, Object>> getTxzOrderMember(String txzMerchantId);

	/**
	* @Description:  通过主题id获取主题的全部金额
	* @Param:
	* @return:
	* @Author: Hua Qunhao
	* @Date: 2019-03-06-0006
	*/
	Double findPaymentByEventId(String eventId);

	/**
	 * @Author hzq
	 * @Description //查找多场活动订单  类型为3的
	 * @Date 17:59 2019/5/6
	 * @param
	 * @return
	 **/
    List<OrderForm> getMultipleOrder();
}
